package java5.annotation;

/**
 * @author lwx
 * @desc 预定义的三种标准annotation
 * a 、Override
 * 指出某个method覆盖了superclass 的method当你要覆盖的方法名拼写错时编译不通过
 * b、Deprecated
 * 指出某个method或element类型的使用是被阻止的，子类将不能覆盖该方法
 * c、SupressWarnings
 * 关闭class、method、field、variable 初始化的编译期警告，比如：List没有使用 Generic,则@SuppressWarnings("unchecked")去掉编译期警告。
 * @create 2018-06-20 11:09
 */
public class Test {


    /**
     *  a, Target
     指定所定义的annotation可以用在哪些程序单元上
     如果Target没有指定，则表示该annotation可以使用在任意程序单元上
     * */

/**
 * b.retention
 *@Retention(RetentionPolicy.SOURCE)  // Annotation会被编译期丢弃
public @interface TODO1 {}
 @Retention(RetentionPolicy.CLASS)   // Annotation保留在class文件中，但会被JVM忽略
 public @interface TODO2 {}
 @Retention(RetentionPolicy.RUNTIME) // Annotation保留在class文件中且会被JVM读取
  *public @interface TODO3{}
  *
  *
  * */
/**

 c, Documented
         指出被定义的annotation被视为所熟悉的程序单元的公开API之一
 被@Documented标注的annotation会在javadoc中显示，这在annotation对它标注的元素被客户端使用时有影响时起作用
 * */

 /**
  *
  * d, Inherited
  该meta-annotation应用于目标为class的annotation类型上，被此annotattion标注的class会自动继承父类的annotation
  *
  * */
}
